package
        com.zzc.sale.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.hos.entity.stock.Purchase;
import com.hos.entity.stock.PurchaseItem;
import com.hos.entity.sys.User;
import com.hos.utils.WebUtil;
import com.zzc.sale.feigns.UserFeign;
import com.zzc.sale.mapper.PurchaseItemMapper;
import com.zzc.sale.mapper.PurchaseMapper;
import com.zzc.sale.service.PurchaseItemService;
import com.zzc.sale.service.PurchaseService;
import com.zzc.sale.vo.NewPurchaseVo;
import com.zzc.sale.vo.PurchaseItemDtos;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.*;

/**
 * @author：xIAO_ZHOU_TX
 * @date：Created in 2023/12/19 11:51
 * @description：
 * @modified By：
 * @version:
 */
@Service
public class PurchaseItemServiceImpl implements PurchaseItemService {
    @Resource
    private PurchaseMapper purchaseMapper;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Resource
    private UserFeign userFeign;
    @Resource
    private PurchaseItemMapper purchaseItemMapper;
    @Resource
    private PurchaseService purchaseService;

    @Override
    public Integer addPurchase(NewPurchaseVo newPurchaseVo) {


        Purchase purchas = new Purchase();
        // 单据ID
        purchas.setPurchaseId(newPurchaseVo.getPurchaseDto().getPurchaseId());
        // 供应商
        purchas.setProviderId(newPurchaseVo.getPurchaseDto().getProviderId());
        // 总额
        purchas.setPurchaseTradeTotalAmount(newPurchaseVo.getPurchaseDto().getPurchaseTradeTotalAmount());
        // 创建时间
        purchas.setCreateTime(new Date());
        //状态
        purchas.setStatus("1");
        //创建人
        String token = WebUtil.getToken();
        String userName= userFeign.selectUserByPhone(redisTemplate.opsForValue().get("user:" + token)).getUserName();
        purchas.setCreateBy(userName);
        //申请人
        purchas.setApplyUserName(userName);
        //给item表添加数据
        PurchaseItem purchaseItem = new PurchaseItem();
        List<PurchaseItemDtos> purchaseItemDtos = newPurchaseVo.getPurchaseItemDtos();
        for (PurchaseItemDtos itemDtos: purchaseItemDtos) {
            String id = purchaseService.generatePurchaseId();
            purchaseItem.setItemId(id);
            //采购单据id
            purchaseItem.setPurchaseId(newPurchaseVo.getPurchaseDto().getPurchaseId());
            //药品id
            purchaseItem.setMedicinesId(itemDtos.getMedicinesId());
            //药品名称
            purchaseItem.setMedicinesName(itemDtos.getMedicinesName());
            //规则
            purchaseItem.setConversion(itemDtos.getConversion());
            //生产厂家
            purchaseItem.setProducterId(itemDtos.getProducterId());
            //数量
            purchaseItem.setPurchaseNumber(itemDtos.getPurchaseNumber());
            //单位
            purchaseItem.setUnit(itemDtos.getUnit());
            //批发价
            purchaseItem.setTradePrice(itemDtos.getTradePrice());
            //批发额
            purchaseItem.setTradeTotalAmount(itemDtos.getTradeTotalAmount());
            //批次号
            purchaseItem.setBatchNumber(itemDtos.getBatchNumber());
            //备注
            purchaseItem.setRemark(itemDtos.getRemark());
            purchaseItemMapper.insert(purchaseItem);
        }
        return purchaseMapper.insert(purchas);
    }
    @Override
    public List<PurchaseItem> getPurchaseItemById(String purchaseId) {
        LambdaQueryWrapper<PurchaseItem> queryWrapper =new LambdaQueryWrapper<>();
        if(StringUtils.hasText(purchaseId)){
                queryWrapper.eq(PurchaseItem::getPurchaseId,purchaseId);
        }
        return purchaseItemMapper.selectList(queryWrapper);
    }
    public Map<String, Object> queryPurchaseAndItemByPurchaseId(String purchaseId) {
        Map<String, Object> map=new HashMap<>();
        LambdaQueryWrapper<PurchaseItem> queryWrapper =new LambdaQueryWrapper<>();
        LambdaQueryWrapper<Purchase> wrapper =new LambdaQueryWrapper<>();
        if(StringUtils.hasText(purchaseId)){
            queryWrapper.eq(PurchaseItem::getPurchaseId,purchaseId);
            map.put( "purchaseItem",purchaseItemMapper.selectList(queryWrapper));
        }
        if(StringUtils.hasText(purchaseId)){
            wrapper.eq(Purchase::getPurchaseId,purchaseId);
            map.put( "purchase",purchaseMapper.selectOne(wrapper));
        }
        return map;
    }

    @Override
    public Integer erpAddPurchase(NewPurchaseVo newPurchaseVo) {
        Purchase purchas = new Purchase();
        // 单据ID
        purchas.setPurchaseId(newPurchaseVo.getPurchaseDto().getPurchaseId());
        // 供应商
        purchas.setProviderId(newPurchaseVo.getPurchaseDto().getProviderId());
        // 总额
        purchas.setPurchaseTradeTotalAmount(newPurchaseVo.getPurchaseDto().getPurchaseTradeTotalAmount());
        // 创建时间
        purchas.setCreateTime(new Date());
        //状态
        purchas.setStatus("1");
        //创建人
        String token = WebUtil.getToken();
        String userName= userFeign.selectUserByPhone(redisTemplate.opsForValue().get("user:" + token)).getUserName();
        purchas.setCreateBy(userName);
        //申请人
        purchas.setApplyUserName(userName);
        //给item表添加数据
        PurchaseItem purchaseItem = new PurchaseItem();
        List<PurchaseItemDtos> purchaseItemDtos = newPurchaseVo.getPurchaseItemDtos();
        for (PurchaseItemDtos itemDtos: purchaseItemDtos) {

            String id = purchaseService.generatePurchaseId();
            purchaseItem.setItemId(id);
            //采购单据id
            purchaseItem.setPurchaseId(newPurchaseVo.getPurchaseDto().getPurchaseId());
            //药品id
            purchaseItem.setMedicinesId(itemDtos.getMedicinesId());
            //药品名称
            purchaseItem.setMedicinesName(itemDtos.getMedicinesName());
            //规则
            purchaseItem.setConversion(itemDtos.getConversion());
            //生产厂家
            purchaseItem.setProducterId(itemDtos.getProducterId());
            //数量
            purchaseItem.setPurchaseNumber(itemDtos.getPurchaseNumber());
            //单位
            purchaseItem.setUnit(itemDtos.getUnit());
            //批发价
            purchaseItem.setTradePrice(itemDtos.getTradePrice());
            //批发额
            purchaseItem.setTradeTotalAmount(itemDtos.getTradeTotalAmount());
            //批次号
            purchaseItem.setBatchNumber(itemDtos.getBatchNumber());
            //备注
            purchaseItem.setRemark(itemDtos.getRemark());

            UpdateWrapper<PurchaseItem> wrapper= new UpdateWrapper<>();
            wrapper.eq("purchase_id",newPurchaseVo.getPurchaseDto().getPurchaseId());
            purchaseItemMapper.update(purchaseItem,wrapper);
        }
        return purchaseMapper.updateById(purchas);

    }

    @Override
    public Integer erpAddPurchaseToAudit(NewPurchaseVo newPurchaseVo) {
        Purchase purchas = new Purchase();
        // 单据ID
        purchas.setPurchaseId(newPurchaseVo.getPurchaseDto().getPurchaseId());
        // 供应商
        purchas.setProviderId(newPurchaseVo.getPurchaseDto().getProviderId());
        // 总额
        purchas.setPurchaseTradeTotalAmount(newPurchaseVo.getPurchaseDto().getPurchaseTradeTotalAmount());
        // 创建时间
        purchas.setCreateTime(new Date());
        //状态
        purchas.setStatus("2");
        //创建人
        String token = WebUtil.getToken();
        String userName= userFeign.selectUserByPhone(redisTemplate.opsForValue().get("user:" + token)).getUserName();
        purchas.setCreateBy(userName);
        //申请人
        purchas.setApplyUserName(userName);

        //给item表添加数据
        PurchaseItem purchaseItem = new PurchaseItem();
        List<PurchaseItemDtos> purchaseItemDtos = newPurchaseVo.getPurchaseItemDtos();
        for (PurchaseItemDtos itemDtos: purchaseItemDtos) {
            String id = purchaseService.generatePurchaseId();
            purchaseItem.setItemId(id);
            //采购单据id
            purchaseItem.setPurchaseId(newPurchaseVo.getPurchaseDto().getPurchaseId());
            //药品id
            purchaseItem.setMedicinesId(itemDtos.getMedicinesId());
            //药品名称
            purchaseItem.setMedicinesName(itemDtos.getMedicinesName());
            //规则
            purchaseItem.setConversion(itemDtos.getConversion());
            //生产厂家
            purchaseItem.setProducterId(itemDtos.getProducterId());
            //数量
            purchaseItem.setPurchaseNumber(itemDtos.getPurchaseNumber());
            //单位
            purchaseItem.setUnit(itemDtos.getUnit());
            //批发价
            purchaseItem.setTradePrice(itemDtos.getTradePrice());
            //批发额
            purchaseItem.setTradeTotalAmount(itemDtos.getTradeTotalAmount());
            //批次号
            purchaseItem.setBatchNumber(itemDtos.getBatchNumber());
            //备注
            purchaseItem.setRemark(itemDtos.getRemark());
            purchaseItemMapper.updateById(purchaseItem);
        }
        return purchaseMapper.updateById(purchas);
    }


    @Override
    public Integer addPurchaseToAudit(NewPurchaseVo newPurchaseVo) {
        Purchase purchas = new Purchase();
        // 单据ID
        purchas.setPurchaseId(newPurchaseVo.getPurchaseDto().getPurchaseId());
        // 供应商
        purchas.setProviderId(newPurchaseVo.getPurchaseDto().getProviderId());
        // 总额
        purchas.setPurchaseTradeTotalAmount(newPurchaseVo.getPurchaseDto().getPurchaseTradeTotalAmount());
        // 创建时间
        purchas.setCreateTime(new Date());
        //状态
        purchas.setStatus("2");
        //创建人
        String token = WebUtil.getToken();
        String userName= userFeign.selectUserByPhone(redisTemplate.opsForValue().get("user:" + token)).getUserName();
        purchas.setCreateBy(userName);
        //申请人
        purchas.setApplyUserName(userName);

        //给item表添加数据
        PurchaseItem purchaseItem = new PurchaseItem();
        List<PurchaseItemDtos> purchaseItemDtos = newPurchaseVo.getPurchaseItemDtos();
        for (PurchaseItemDtos itemDtos: purchaseItemDtos) {
            String id = purchaseService.generatePurchaseId();
            purchaseItem.setItemId(id);
            //采购单据id
            purchaseItem.setPurchaseId(newPurchaseVo.getPurchaseDto().getPurchaseId());
            //药品id
            purchaseItem.setMedicinesId(itemDtos.getMedicinesId());
            //药品名称
            purchaseItem.setMedicinesName(itemDtos.getMedicinesName());
            //规则
            purchaseItem.setConversion(itemDtos.getConversion());
            //生产厂家
            purchaseItem.setProducterId(itemDtos.getProducterId());
            //数量
            purchaseItem.setPurchaseNumber(itemDtos.getPurchaseNumber());
            //单位
            purchaseItem.setUnit(itemDtos.getUnit());
            //批发价
            purchaseItem.setTradePrice(itemDtos.getTradePrice());
            //批发额
            purchaseItem.setTradeTotalAmount(itemDtos.getTradeTotalAmount());
            //批次号
            purchaseItem.setBatchNumber(itemDtos.getBatchNumber());
            //备注
            purchaseItem.setRemark(itemDtos.getRemark());
            purchaseItemMapper.insert(purchaseItem);
        }
        return purchaseMapper.insert(purchas);
    }
}